在编码标准文档中,我发现了这样的说法:Avoidusingforeachtoiterateoverimmutablevalue-typecollections.E.g.Stringarrays.为什么要避免这种情况? 最佳答案 你不应该回避它。您正在阅读的编码标准文档是在胡说八道。设法找到作者,请他解释。除此之外,string是一个引用类型,而数组总是可变的……老实说,这让我担心文档其余部分的质量。还有其他可疑的建议吗?(“不可变”可能指的是值类型而不是集合-事实上,它是模棱两可的是另一个令人担忧的迹象,IMO。)
我需要一个for循环来完成它的所有迭代,即使在任何一个迭代中有任何异常也是如此。 最佳答案 for(...){try{//Dostuff}catch(Exceptionex){//Handle(orignore)theexception}} 关于c#-如何在循环中处理异常并不断迭代?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/564229/
有人可以提供有关使用迭代器的真实示例吗?我尝试在谷歌上搜索,但对答案并不满意。 最佳答案 您可能听说过数组和容器-存储其他对象列表的对象。但是为了让一个对象代表一个列表,它实际上不必“存储”该列表。它所要做的就是为您提供允许您获取列表项的方法或属性。在.NET框架中,接口(interface)IEnumerable从这个意义上说,一个对象必须支持才能被视为“列表”。稍微简化一下(省略一些历史包袱):publicinterfaceIEnumerable{IEnumeratorGetEnumerator();}所以你可以从中得到一个枚举
在尝试使用迭代器block后,我注意到生成的IL代码不是我期望的那样。生成try-faultblock而不是try-finallyblock,这是我从未见过的。我注意到编译器不允许我在“手写”C#中使用fault关键字。两者有区别吗?C#代码:staticIEnumerableReadAllLines(stringfileName){using(varfile=System.IO.File.OpenText(fileName)){strings;while((s=file.ReadLine())!=null){yieldreturns;}}}MSIL代码:.methodprivateh
当您捕获for循环的迭代变量时,C#将该变量视为在循环外声明的一样。这意味着在每次迭代中捕获相同的变量。以下程序写入333而不是写入012:Action[]actions=newAction[3];for(inti=0;iConsole.Write(i);foreach(Actionainactions)a();//333我正在阅读C#inaNutshell(第5版),今天我遇到了这个,但我无法理解它,我不明白为什么输出是333并且不是012。是不是因为要打印的i的值是循环之后的值?这怎么可能?i应该在循环之后处理,不是吗? 最佳答案
我有一个名为Students的属性,类型为List.通过反射我可以得到StudentsProperty的值。现在的问题是如何迭代学生列表。我需要检查StudentID[somevalue]是否在该集合中。varcollection=studentPro.GetValue(studentObj,null);//Ineedtoiteratelikethis,foreach(varitemincollection){if(item.StudentID==33)//Dostuff}请帮帮我。 最佳答案 你只需要施放它:varcollecti
谈论System.Collections.Generic.List在这里。通过下面的例子,Method1和Method2可以在不同的线程上同时执行吗?谢谢classTest{privatereadonlyList_data;publicTest(){_data=LoadData();}privateListLoadData(){//Getdatafromdv.}publicvoidMethod1(){foreach(varlistin_data){//dosomething}}publicvoidMethod2(){foreach(varlistin_data){//dosomethi
如何编写自定义IEnumerator需要维护一些状态并且仍然可以使用迭代器block来简化它的实现?我能想到的最好的是这样的:publicclassMyEnumerator:IEnumerator{privateIEnumerator_enumerator;publicintPosition{get;privateset;}//orsomeothercustompropertiespublicMyEnumerator(){Position=0;_enumerator=MakeEnumerator();}privateIEnumeratorMakeEnumerator(){//yield
我正在使用dotCover来分析我的单元测试的代码覆盖率,我得到了一些奇怪的结果......我有一个覆盖率不完整的迭代器方法,但未覆盖的语句只是方法末尾的右大括号。这是我正在测试的方法:publicstaticIEnumerableCommonPrefix(thisIEnumerablesource,IEnumerableother,IEqualityComparercomparer){source.CheckArgumentNull("source");other.CheckArgumentNull("other");returnsource.CommonPrefixImpl(oth
假设一个简单的例子,其中一个方法检索一个集合(例如包含一些配置字符串的列表)并尝试以某种方式检查它:voidInit(){XmlDocumentconfig=newXmlDocument();config.Load(someXml);varlist=config.SelectNodes("/root/strings/key");//Normally,listshouldnotbenulloremptyif(list==null||list.Count==0)thrownewSomeExceptionType(message);//Whatkindofexceptiontothrow?/